package bdsimple.impl.mysql;

import java.sql.ResultSet;

import bdsimple.dao.base.CiudadDAO;
import bdsimple.dao.base.CiudadRecursoDAO;
import bdsimple.dao.base.RecursoDAO;
import bdsimple.dto.base.CiudadDTO;
import bdsimple.dto.base.CiudadRecursoDTO;
import bdsimple.dto.base.RecursoDTO;
import bdsimple.abstractfactory.AbstractFactoryDAO;
import dao.base.api.IDTO;
import dao.base.impl.Reference;

public class CiudadRecursoDAOImpl extends MySQLBaseDAO implements
		CiudadRecursoDAO {

	public CiudadRecursoDAOImpl() {
		super(CiudadRecursoDTO.class);
	}

	@Override
	protected String createInsertCollst(IDTO dto) throws Exception {

		StringBuffer strbuf = new StringBuffer();

		strbuf.append(CiudadRecursoDTOImpl.CIUDAD_REFERENCIA);
		strbuf.append(", ");
		strbuf.append(CiudadRecursoDTOImpl.RECURSO_REFERENCIA);

		return strbuf.toString();

	}

	@Override
	protected String createInsertValues(IDTO dto) throws Exception {

		CiudadRecursoDTOImpl ciudadRecursoDTOImpl = (CiudadRecursoDTOImpl) dto;

		StringBuffer strbuf = new StringBuffer();

		Reference<CiudadDTO> refCiudad = ciudadRecursoDTOImpl.getCiudadDTORef();
	    refCiudad.checkInsert();
	    strbuf.append(refCiudad.getIdAsString());
		
		strbuf.append(", ");
		
		Reference<RecursoDTO> refRecurso = ciudadRecursoDTOImpl.getRecursoDTORef();
		refRecurso.checkInsert();
	    strbuf.append(refRecurso.getIdAsString());

		return strbuf.toString();

	}

	@Override
	protected String createTableColumns() throws Exception {

		CiudadDAO ciudadDAO = (CiudadDAO) //
		AbstractFactoryDAO.getFactoryDAO().getDAO(//
				CiudadDAO.class, connectionBean);

		RecursoDAO recursoDAO = (RecursoDAO) //
		AbstractFactoryDAO.getFactoryDAO().getDAO(//
				RecursoDAO.class, connectionBean);

		StringBuffer strbuf = new StringBuffer();

		strbuf.append(CiudadRecursoDTOImpl.ID);
	    strbuf.append(" INT PRIMARY KEY AUTO_INCREMENT, ");
		strbuf.append(CiudadRecursoDTOImpl.CIUDAD_REFERENCIA);
		strbuf.append(" INT REFERENCES ");
		strbuf.append(ciudadDAO.getTableName());
		strbuf.append(", ");
		strbuf.append(CiudadRecursoDTOImpl.RECURSO_REFERENCIA);
		strbuf.append(" INT REFERENCES ");
		strbuf.append(recursoDAO.getTableName());

		return strbuf.toString();

	}

	@Override
	protected String createUpdateValues(IDTO dto) throws Exception {

		CiudadRecursoDTOImpl ciudadRecursoDTOImpl = (CiudadRecursoDTOImpl) dto;
		
		StringBuffer strbuf = new StringBuffer();

		strbuf.append(CiudadRecursoDTOImpl.CIUDAD_REFERENCIA);
		strbuf.append(" = ");
		
		Reference<CiudadDTO> refCiudad = ciudadRecursoDTOImpl.getCiudadDTORef();
	    refCiudad.checkInsert();
	    strbuf.append(refCiudad.getIdAsString());
		
		strbuf.append(", ");
		
		strbuf.append(CiudadRecursoDTOImpl.RECURSO_REFERENCIA);
		strbuf.append(" = ");
		
		Reference<RecursoDTO> refRecurso = ciudadRecursoDTOImpl.getRecursoDTORef();
		refRecurso.checkInsert();
	    strbuf.append(refRecurso.getIdAsString());
	
		return strbuf.toString();
	}

	@Override
	protected IDTO internalResultSetToDTO(ResultSet rs, IDTO dto)
			throws Exception {

		CiudadRecursoDTOImpl ret = (CiudadRecursoDTOImpl) dto;
		
		ret.setId(rs.getInt(CiudadRecursoDTOImpl.ID));

		Reference<CiudadDTO> refCiudad = ret.getCiudadDTORef();
	    refCiudad.setRefIdent(rs.getInt(CiudadRecursoDTOImpl.CIUDAD_REFERENCIA));
	    refCiudad.setRefValue(null);
	    
	    Reference<RecursoDTO> refRecurso = ret.getRecursoDTORef();
	    refRecurso.setRefIdent(rs.getInt(CiudadRecursoDTOImpl.RECURSO_REFERENCIA));
	    refRecurso.setRefValue(null);

		return ret;
	}

}
